[新機能] Amazon Redshift S3イベント統合による Auto-copy が一般提供開始したので試してみました

[新機能] Amazon Redshift S3イベント統合による Auto-copy が一般提供開始したので試してみました

Clock Icon2024.10.31

AWS事業本部コンサルティング部の石川です。Amazon S3からAmazon Redshiftへのデータ取り込みを簡素化するAmazon Redshift S3イベント統合による「Auto-copy」機能が一般提供開始されました。この新機能により、追加のツールやカスタムソリューションを必要とせずに、S3からRedshiftテーブルへの継続的なファイル取り込みが可能になります。早速、試してみます!

https://aws.amazon.com/jp/about-aws/whats-new/2024/10/general-availability-auto-copy-amazon-redshift/

S3 イベント統合による Auto-copy とは

Auto-copy 機能は、S3イベント統合を活用して、シンプルなSQLコマンドでAmazon S3からAmazon Redshiftへのデータ自動ロードを実現します。

  • カスタムソリューションなしで自動的かつ増分的なデータ取り込みが可能
  • 追加コストなしで利用可能
  • 既存のCOPYステートメントをAuto-copyジョブに変換可能
  • ロード済みファイルを追跡し、データの重複を最小限に抑制
  • JDBCやODBCクライアントを使用して簡単にセットアップ可能
  • 低品質データファイルの自動エラー処理
  • 各ファイルを1回だけロードする仕組み

前提条件

Auto-copyの前提として、RedshiftとS3バケットに設定が必要です。

  • 暗号化されたAmazon Redshift Provisioned または Amazon Redshift Serverless

  • S3バケットポリシーで必要な権限を付与したS3バケット

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "Auto-Copy-Policy-01",
                "Effect": "Allow",
                "Principal": {
                    "Service": [
                        "redshift.amazonaws.com",
                        "redshift-serverless.amazonaws.com"
                    ]
                },
                "Action": "*",
                "Resource": "arn:aws:s3:::cm-datalake-20241031"
            }
        ]
    }
    

    ※ PrincipalのServiceは、Amazon Redshift Provisioned と Amazon Redshift Serverless の両方を許可するように設定しています。

S3イベント統合の設定

準備が整いましたので、早速作成します。マネジメントコンソールから設定します。ナビゲーションペインで[S3 event Integration]を選択し、 [Create S3 event Integration]を選択。

Step1: Enter name and description

Integration nameとDescriptionを入力し、[次へ]を選択

amazon-redshift-auto-copy-ga-1

Step2: Select source

連携元となるS3バケットを指定します。[Browse S3 buckets]を押します。

amazon-redshift-auto-copy-ga-2

ダイアログに表示されたS3バケットの一覧の中からいずれかを選択します。

amazon-redshift-auto-copy-ga-3-1

[continue] を押して元の画面に戻ります。

amazon-redshift-auto-copy-ga-4

[次へ] を押して進みます。

Step3: Select target

連携先となるRedshiftを指定します。[Browse Redshift data warehouse]を押します。

amazon-redshift-auto-copy-ga-5

ダイアログに表示されたRedshiftの一覧の中からRedshiftを選択します。

amazon-redshift-auto-copy-ga-6

元の画面に戻ると、エラーメッセージ(リソースポリシーの修正)と[Fix it for me]オプションが表示されます。このオプションには、チェックを入れます。
その理由は、S3 event integrationを設定するには、選択したRedshiftに適切なリソースポリシーが有効になっている必要があります。[Fix it for me] オプションを選択すると、自動的に設定してくれます。

amazon-redshift-auto-copy-ga-8

次に進むとどのような変更を加えるのかの解説が表示されます。

amazon-redshift-auto-copy-ga-9

Step4: タグの追加

そのままで構いません。

amazon-redshift-auto-copy-ga-10

Step5: Review and create

内容を確認して、進むとZero-ETL 統合の作成します。

amazon-redshift-auto-copy-ga-11

ステータスが「作成中」 となりました。

amazon-redshift-auto-copy-ga-12

S3 event integrationの作成が完了すると、ステータスが「アクティブ」 になります。

amazon-redshift-auto-copy-ga-13

Redshiftにテーブルを作成

Redshiftに取り込み先のテーブルを作成します。

CREATE TABLE lineorder 
(
  lo_orderkey          INTEGER NOT NULL,
  lo_linenumber        INTEGER NOT NULL,
  lo_custkey           INTEGER NOT NULL,
  lo_partkey           INTEGER NOT NULL,
  lo_suppkey           INTEGER NOT NULL,
  lo_orderdate         DATE NOT NULL,
  lo_orderpriority     VARCHAR(15) NOT NULL,
  lo_shippriority      VARCHAR(1) NOT NULL,
  lo_quantity          INTEGER NOT NULL,
  lo_extendedprice     INTEGER NOT NULL,
  lo_ordertotalprice   INTEGER NOT NULL,
  lo_discount          INTEGER NOT NULL,
  lo_revenue           INTEGER NOT NULL,
  lo_supplycost        INTEGER NOT NULL,
  lo_tax               INTEGER NOT NULL,
  lo_commitdate        DATE NOT NULL,
  lo_shipmode          VARCHAR(10) NOT NULL
) SORTKEY AUTO;

amazon-redshift-auto-copy-ga-14

Auto-copyジョブの設定

Auto-copyジョブを設定するには、既存のCOPY構文にJOB CREATEパラメータを追加します。

COPY lineorder FROM 's3://cm-datalake-20241031/lineorder/'
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
IGNOREHEADER 1
DELIMITER '\t'
FORMAT AS CSV
COMPUPDATE off
JOB CREATE job_lineorder AUTO ON;

amazon-redshift-auto-copy-ga-15

この設定により、指定したS3パスに新しいファイルが追加されると自動的にRedshiftテーブルにロードされます。

Auto-copyジョブを試してみる

では、準備が整いましたので、Auto-copyジョブを試してみます。

最初に、S3バケットにファイルをアップロードします。

amazon-redshift-auto-copy-ga-17

10秒程度で、自動的にファイルの内容が取り込まれました。

amazon-redshift-auto-copy-ga-18

3つのファイルをアップロードして、自動的にファイルの内容が取り込まれました。取り込まれる時間は、10秒から60秒程度と差がありましたので、頻繁にファイルを送るとある程度まとめて処理されるのかもしれません。

amazon-redshift-auto-copy-ga-19

各ファイルの結果は以下のとおりです。マネジメントコンソールの操作によるものでエンドツーエンドのラウンドトリップを含みます。3つ目のファイルの取込が遅れたことが確認できます。

  • ファイル1: 1992-01-01.tsv - 12秒
    • 12:50:26に送信済み
    • 12:50:38にロード済み
  • ファイル2: 1992-01-02.tsv - 16秒
    • 12:51:03に送信済み
    • 12:51:19にロード済み
  • ファイル3: 1992-01-03 - 55秒
    • 12:51:31に送信済み
    • 12:52:26にロード済み

Auto-copyジョブを手動で実行する

Auto-copyジョブを一時停止したり、手動で実行したりする必要がある場合があります。

COPY JOB RUN job_lineorder;

自動実行を無効にするには、以下のコマンドを実行します。

COPY JOB ALTER job_lineorder
AUTO OFF;

Auto-copyジョブのエラー処理と監視

Auto-copyジョブは、指定されたS3フォルダを継続的に監視し、新しいファイルが作成されるたびに取り込みを実行します。エラーが発生した場合、ジョブはシステムテーブルにログを記録します。以下のシステムテーブルを使用して監視やトラブルシューティングを行うことができます。

  • SYS_COPY_JOB:Auto-copyジョブのリスト
  • SYS_LOAD_HISTORY:ジョブの集計メトリクス
  • STL_LOAD_COMMITS:処理されたファイルの状態と詳細
  • STL_LOAD_ERRORS:取り込みに失敗したファイルの詳細

SYS_LOAD_HISTORYビューから取り込まれた状況を確認します。

amazon-redshift-auto-copy-ga-20

Auto-copyジョブのベストプラクティス

Auto-copyジョブを効果的に使用するためのベストプラクティスは以下の通りです:

  • 各ファイルに一意のファイル名を使用する
  • 既存のファイルを更新または上書きしない
  • 既に処理されたファイルを再取り込みする場合は、通常のCOPYステートメントを使用する
  • ファイル追跡履歴をリセットする場合は、Auto-copyジョブを削除して再作成する

Auto-copyジョブの注意点

Auto-copyジョブを使用する際の主な注意点は以下の通りです。

  • S3プレフィックス内の同じ名前のファイルはロードされません
  • 一部の機能はサポートされていません

最後に

Amazon RedshiftのAuto-copy機能によって、AWSのサービス以外からもS3を経由してRedshiftへのデータ取り込みがこれまで以上に簡単になりました。この新機能を活用することで、データパイプラインの構築が簡素化され、最新のデータにアクセスするためのプロセスが効率化されます。Auto-copy機能は、Amazon Redshift ServerlessとAmazon Redshift Provisioned(RA3インスタンス)で利用可能です。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.